var express = require('express');
// webSocket文件上传
const WebSocket = require('ws');
const fs = require('fs');
const wss = new WebSocket.Server({ port: 3001 });

// 初始websocket文件上传
// wss.on('connection', (ws) => {
//   ws.on('message', (message) => {
//     const fileData = message;
//     const uniqueSuffix = Date.now() + '_' + Math.round(Math.random() * 1e9);
//     fs.writeFile(`./upload/${uniqueSuffix}.png`, fileData, (err) => {
//       if (err) {
//         console.log(err);
//       } else {
//         console.log('文件上传成功');
//       }
//     })
//   })
// })

// websocket文件后缀动态上传
// wss.on('connection', (ws) => {
//     ws.on('message', (message) => {
//         const fileInfo = JSON.parse(message);
//         const fileData = fileInfo.data;
//         // 现在，反转过程以获取原始的 Uint8Array
//         const reversedUint8Array = stringToUint8Array(fileData);

//         const uniqueSuffix = Date.now() + '_' + Math.round(Math.random() * 1e9);
//         const fileName = `${uniqueSuffix}.${fileInfo.name.split('.')[1]}`
//         fs.writeFile(`./upload/${fileName}`, reversedUint8Array, (err) => {
//             if (err) {
//                 console.log(err);
//             } else {
//                 console.log('文件上传成功');
//             }
//         })
//     })
// })

// function stringToUint8Array(str) {
//     const charArray = str.split('').map(char => char.charCodeAt(0));
//     return new Uint8Array(charArray);
// }


// websocket文件分段上传接口
// wss.on('connection', (ws) => {
//     let fileName = ''; //保存文件名称
//     let totalChunks = 0;  // 总快数
//     let receivedChunks = 0;    // 已接收到的块数
//     let writableStream = null;    // 可写流用于写入文件
//     ws.on('message', (message) => {
//         if (Buffer.isBuffer(message)) {
//             // fileName等于空数据的时候就代表没有传入数据
//             if (fileName === '') {
//                 const metaBuffer = message.toString();
//                 const meta = JSON.parse(metaBuffer);

//                 // 提取文件名和总块数
//                 fileName = meta.fileName;
//                 totalChunks = meta.totalChunks;
//                 // 创建可写流，用于写入文件
//                 writableStream = fs.createWriteStream(`./upload/${fileName}`)
//             } else {
//                 // 将文件块数据写入可写流
//                 writableStream.write(message);
//                 receivedChunks++;
//                 console.log(receivedChunks);
//                 if (receivedChunks === totalChunks) {
//                     // 关闭可写流保存文件
//                     writableStream.end();
//                     console.log(`文件保存成功:${fileName}`);
//                     writableStream = null;
//                     // 重设相关变量
//                     fileName = '';
//                     totalChunks = 0;
//                     receivedChunks = 0;
//                 }
//             }
//         }
//     })
//     ws.on('error', (error) => {
//         console.error('WebSocket 错误:' + error);
//         // 如果可写流存在，则关闭可写流
//         if (writableStream) {
//             writableStream.end();
//             writableStream = null;
//         }
//     })
// })


// 文件分段上传进度条展示接口
// wss.on('connection', (ws) => {
//     let fileName = ''; //保存文件名称
//     let totalChunks = 0;  // 总快数
//     let receivedChunks = 0;    // 已接收到的块数
//     let writableStream = null;    // 可写流用于写入文件
//     ws.on('message', (message) => {
//       if (Buffer.isBuffer(message)) {
//         // fileName等于空数据的时候就代表没有传入数据
//         if (fileName === '') {
//           const metaBuffer = message.toString();
//           const meta = JSON.parse(metaBuffer);
  
//           // 提取文件名和总块数
//           fileName = meta.fileName;
//           totalChunks = meta.totalChunks;
//           // 创建可写流，用于写入文件
//           writableStream = fs.createWriteStream(`./upload/${fileName}`)
//         } else {
//           // 将文件块数据写入可写流
//           writableStream.write(message);
//           receivedChunks++;
  
//           // 进度设置
//           let progress = 0;
  
//           console.log(receivedChunks);
//           if (receivedChunks === totalChunks) {
//             // 关闭可写流保存文件
//             writableStream.end();
//             console.log(`文件保存成功:${fileName}`);
//             writableStream = null;
//             // 重设相关变量
//             fileName = '';
//             totalChunks = 0;
//             receivedChunks = 0;
//             progress = 100;
//           } else {
//             progress = Math.floor((receivedChunks / totalChunks) * 100);
//           }
//           ws.send(JSON.stringify({ type: 'progress', progress }))
//         }
//       }
//     })
//     ws.on('error', (error) => {
//       console.error('WebSocket 错误:' + error);
//       // 如果可写流存在，则关闭可写流
//       if (writableStream) {
//         writableStream.end();
//         writableStream = null;
//       }
//     })
//   })

module.exports = router;
